package com.shujia.scala

object Demo7Class {

  def main(args: Array[String]): Unit = {
    //创建类的对象
    val student = new Student("001", "张三")
    student.print()

    val lisi = new Student("002", "李四", 24)
    lisi.print()

    println(lisi.toString)


    /**
     * 多态
     * 父类的引用指向子类的对象
     *
     */

    val obj: Object = new Student("003", "王五", 24)
    println(obj)


  }
}

/**
 * 在类中可以定义，属性，方法，构造函数
 * 默认构造函数：{}是scala默认构造函数的代码块,默认构造函数可以有参数
 *
 * scala的类同样是Object的子类
 */
class Student(id: String, name: String) {
  println("默认的构造函数")

  /**
   * 类的属性
   *
   */
  val _id: String = id
  val _name: String = name

  //下划线代码占位符，相当于给一个默认值
  var _age: Int = _

  /**
   * 重载构造函数
   * 在重载构造函数的第一行需要手动调用默认构造函数
   *
   */
  def this(id: String, name: String, age: Int) {
    //调用默认构造函数
    this(id, name)

    //给属性赋值
    this._age = age
  }


  /**
   * 在类中定义方法
   *
   */
  def print(): Unit = {
    println(s"student(id:${_id},name:${_name},age:${_age})")
  }


  /**
   * 重写父类的方法
   *
   */

  override def toString: String = s"student(id:${_id},name:${_name},age:${_age})"

}
